#ifndef RAILS_H
#define RAILS_H

#include "types.h"
#include <QtGlobal>
#include <QLineF>
#include <QPointF>

class QPainter;
class QPointF;
class QRoundabout;
class QLineF;
class QRectF;

class Rails
{
public:
    Rails();
    Rails(int from, int to, RailBed fromRailBed, RailBed toRailBed, qreal width, QRoundabout *r);

    int getFrom() const;
    int getTo() const;
    int getFromRailBed() const;
    int getToRailBed() const;
    QLineF getSrcLine() const;
    QLineF getDstLine() const;
    QPointF getIntersectionPoint() const;
    bool isEllipseUsed() const;
    qreal getRotFactor() const;

    void setFromRailBed(RailBed a);
    void setToRailBed(RailBed b);

    void draw(QPainter *painter, qreal fromFi, qreal toFi, qreal dist);

private:
    int _from;  // index 0 means between branches 0 and 1, and so on.
    int _to;
    qreal _width;
    qreal _rotFactor;    // czasami łuk torów trzeba narysować odwrócony
    qreal _spanAngle;       // kąt określający jaką część elipsy rysujemy
    QRectF *_ellipseLeftRectF;
    QRectF *_ellipseRightRectF;
    RailBed _fromRailBed;
    RailBed _toRailBed;
    QRoundabout *_qr;
    QPointF *_fromDistLeft, *_toDistLeft, *_fromPointLeft, *_toPointLeft,
            *_fromDistRight, *_toDistRight, *_fromPointRight, *_toPointRight;
    bool _pointsComputed;



    //  --------------DANE DLA TRAMWAJÓW----------------
    QLineF _srcLine;  // środkowa linia torów źródłowych
    QLineF _dstLine;  // środkowa linia torów docelowych
    QPointF *_intersectionPoint;    // punkt przecięcia prostopadłych do torów; wokół niego będzie się obracał tramwaj
    bool _ellipseUsed;

    void computePoints(qreal fromFi, qreal toFi, qreal dist);
    qreal repositionFromPoints(QPointF*, QPointF*);
    qreal repositionToPoints(QPointF*, QPointF*);
};

#endif // RAILS_H
